public class FizzBuzz {
    private final int number;
    // 常量定义
    private static final int THREE = 3;
    private static final int FIVE = 5;
    private static final int SEVEN = 7;
    private static final int MIN_VALUE = 1;
    private static final int MAX_VALUE = 100;

    // 构造方法
    public FizzBuzz(int num) {
        if (num < MIN_VALUE || num > MAX_VALUE) {
            throw new IllegalArgumentException("输入值必须在 " + MIN_VALUE + "-" + MAX_VALUE + " 之间");
        }
        this.number = num;
    }

    // 核心方法：返回FizzBuzzWhizz结果
    public String fizzBuzz() {
        String numStr = String.valueOf(number);

        boolean has3 = numStr.contains("3");
        boolean has5 = numStr.contains("5");
        boolean has7 = numStr.contains("7");

        // 第一优先级：包含关系（组合优先于单一）
        if (has3 && has5 && has7) {
            return "FizzBuzzWhizz";
        }
        if (has3 && has5) {
            return "FizzBuzz";
        }
        if (has3 && has7) {
            return "FizzWhizz";
        }
        if (has5 && has7) {
            return "BuzzWhizz";
        }

        // 第二优先级：单一包含关系
        if (has3) {
            return "Fizz";
        }
        if (has5) {
            return "Buzz";
        }
        if (has7) {
            return "Whizz";
        }

        // 第三优先级：倍数关系（按3→5→7顺序拼接，确保所有倍数都被检查）
        StringBuilder result = new StringBuilder();
        if (number % THREE == 0) { // 直接判断，避免辅助方法可能的疏漏
            result.append("Fizz");
        }
        if (number % FIVE == 0) {
            result.append("Buzz");
        }
        if (number % SEVEN == 0) {
            result.append("Whizz");
        }

        // 若没有满足任何规则，返回数字本身
        return result.length() > 0 ? result.toString() : String.valueOf(number);
    }
}